from collections import OrderedDict

import time
from django.template import loader

from contents.models import ContentCategory
from goods.models import GoodsChannel


def get_categories():
    ''''
    ordered_dict = {
        1: {  # 第1组
            'channels': [{}, {}, {}...],  # 一级类别
            'sub_cats': [
                {'id':, 'name':, 'sub_cats': [{}, {}, {}...]},  # 二级类别
                {'id':, 'name':, 'sub_cats': [{}, {}, {}...]},  # 二级类别
            ]
        },
        2: {'channels': [], 'sub_cats': []}  # 第2组
        3: {'channels': [], 'sub_cats': []}  # 第3组
    }

    '''
    # 拼装满足界面显示需求的数据格式： 商品频道及分类菜单
    ordered_dict = OrderedDict()
    # 查询所有的频道(一级类别, url)
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')
    for channel in channels:
        group_id = channel.group_id  # 第n组
        if group_id not in ordered_dict:
            group_dict = {'channels': [], 'sub_cats': []}
            ordered_dict[group_id] = group_dict
        else:
            group_dict = ordered_dict[group_id]

        # 一级类别:  {'id':, 'name':, 'url':}
        cat1 = channel.category
        cat1.url = channel.url  # 类别对象新增url属性
        group_dict['channels'].append(cat1)  # 添加一个一级类别

        # 二级类别: {'id':, 'name':, 'sub_cats': [{}, {}, {}...]}
        for cat2 in cat1.goodscategory_set.all():
            cat2.sub_cats = []  # 对象新增sub_cats属性
            # 三级类别
            for cat3 in cat2.goodscategory_set.all():
                cat2.sub_cats.append(cat3)

            group_dict['sub_cats'].append(cat2)  # 添加二级类别
    return ordered_dict


def generate_static_index_html():
    """生成静态的首页: index.html"""

    print(time.ctime())  # 打印当前执行的时间

    # 1. 获取类别和频道数据
    categories = get_categories()

    # 2. 获取广告内容（轮播图，快讯，3个楼层数据）
    contents = {}
    content_categories = ContentCategory.objects.all()  # 内容类型
    for cat in content_categories:
        # 一查多语法: cat.content_set.all()
        # cat.content_set.all(): 查询一个类型下所有的广告
        contents[cat.key] = cat.content_set.all().filter(
            status=True).order_by('sequence')  # status=True 上线

    # django模板要显示的字典数据
    context = { # mysql查询出来的首页数据
        'categories': categories,
        'contents': contents
    }

    # 3. 使用django模板语法渲染模板,得到静态的首页内容
    # 获取模板对象
    template = loader.get_template('index.html')
    # 渲染得到字符串
    html_str = template.render(context)

    # 4. 把首页内容写到 front_end_pc/index.html 文件中
    file_path = '/home/python/Desktop/meiduo/front_end_pc/index.html'
    with open(file_path, 'w') as file:
        file.write(html_str)











